package cn.edu.neu.lab603.cloudeval.strategy

import cn.edu.neu.lab603.cloudeval.entity.{DataCenter, PhysicalMachine, VirtualMachine}

/** 重分配策略接口。
  * 重分配策略指的是，在需求的动态变化使得虚拟机资源分配没有充分利用的情况下，对虚拟机资源进行重新分配。
  *
  * Created by yfwz100 on 16/9/12.
  */
trait ReallocationStrategy {

  /** 检查是否满足重分配条件.
    *
    * @return 是或否
    */
  def checkResourcesViolation(dataCenter: DataCenter):Boolean

  /** 获得待迁移的虚拟机和实体机之间的映射关系。
    *
    * @return 映射关系
    */
  def reallocate(dataCenter: DataCenter): scala.collection.Map[VirtualMachine, PhysicalMachine]

  /** 清理迁移后的物理机（延迟关机等）。
    * 默认策略为空，即不对物理机进行清理。
    *
    * @param dataCenter 数据中心
    */
  def cleanup(dataCenter: DataCenter) = {}
}
